package public

import (
	"encoding/json"
	"fmt"
	"qianggougo/controller/common"

	models "qianggougo/model"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

type BulletInfo struct {
	Content string `json:"content"`
	Side    string `json:"side"`
	UserID  int    `json:"userid"`
}

type Request struct {
	Bullettype int        `json:"bullettype"`
	Bulletr    BulletInfo `json:"bulletr"`
	Bullethit  BulletInfo `json:"bullethit"` // 这里是切片，支持空数组
}

/**
 * 推送弹幕
 */
func PushBullet(c *gin.Context) {
	var total models.Total
	var reqJson Request
	if err := c.ShouldBindJSON(&reqJson); err != nil {
		c.JSON(400, gin.H{"error": "无效的请求参数"})
		return
	}

	if reqJson.Bullettype == 1 { // 得分
		if reqJson.Bulletr.Side == "red" { // 红色得分
			common.DB.Model(&total).Where("1=1").Update("red_score", gorm.Expr("red_score + 1"))
		} else { // 蓝色得分
			common.DB.Model(&total).Where("1=1").Update("blue_score", gorm.Expr("blue_score + 1"))
		}
	}

	// 转 JSON
	dataBytes, _ := json.Marshal(reqJson)

	// 推入 Redis list
	err := common.RDB.RPush(common.Ctx, "game:bullet:queue", dataBytes).Err()
	if err != nil {
		c.AbortWithStatusJSON(500, gin.H{"err": 2, "msg": "推送失败"})
		return
	}

	fmt.Println("已推送到 Redis:", string(dataBytes))
	c.JSON(200, gin.H{"err": 0, "msg": "推送成功"})
}
